// 事件总线
class EventEmitter {
  listeners = {
    'API:UN_AUTHORIZED': new Set(),
    'API:INVALID': new Set(),
    'API:NETWORK_ERROR': new Set(),
    'API:SESSION_EXPIRED': new Set()
  };
  // 监听事件
  on(eventName, listener) {
    this.listeners[eventName].add(listener);
  }
  // 触发事件
  emit(eventName, ...args) {
    this.listeners[eventName].forEach(listener => listener(...args));
  }

  // 取消监听
  off(eventName, callback) {
    const callbacks = this.listeners[eventName] || [];
    this.listeners[eventName] = callbacks.filter(cb => cb !== callback);
  }
  // 单次监听（触发后自动移除）
  once(eventName, callback) {
    const wrapper = (...args) => {
      callback(...args);
      this.off(eventName, wrapper);
    };
    this.on(eventName, wrapper);
  }
}
const emitter = new EventEmitter();
// 监听：在router.ts中
emitter.on('API:INVALID', text => {
  console.log(`失效: ${text}`);
});
emitter.on('API:UN_AUTHORIZED', text => {
  console.log(`登录过期: ${text}`);
  // ElMessageBox.alert("登录过期", "提示");
  // router.push("/login");
});
// 触发: 在全局请求request.ts的响应拦截器中
emitter.emit('API:UN_AUTHORIZED', '401'); // 输出 "登录过期: 401!"
/** 响应拦截器中 */
// if (data.code === RequestEnums.LOGINTIMEOUT) {
//   event.emit('API:UN_AUTHORIZED');
//   return Promise.reject(data);
// }

// // 单次监听
// emitter.once('alert', () => console.log('Alert once!'));
// emitter.emit('alert'); // 输出 "Alert once!"
// emitter.emit('alert'); // 无输出
// // 取消监听
// const handler = text => console.log(text);
// emitter.on('test', handler);
// emitter.off('test', handler);
// emitter.emit('test', 'No output');

try {
  throw new TypeError('');
  console.log(1);
} catch (error) {
  console.log(2);
} finally {
  console.log(3);
}
console.log(4);
